Bingo, Computer Graphics & Game Developer

C++模板特化

模板为C++提供了泛型的概念

1.在编译初期 编译器并不会给template<typename T> fun分配内存空间 只有在发现程序显式的实例化了这个模板的时候 才会分配响应的内存出来

2.模板也会有不足的时候





比如在对比大小的min()当中

template<typename T>
T& min(const T& a, const T& b)
{
     return (a<b) ? a : b;
}

当中 会出现一定情况的不适用 比如用户想要使用char*来对比每一位大小时 编译器发现char*并没有重载过 > 或者 <运算符 那么就会出现编译无法通过的错误

template<> //告诉了编译器 这是一个模板的特化
const char* min<char *>(const char* const& a, const char* const& b)
{
     return (strcmp(a, b) < 0) ? a : b;
}

定义完之后 min就可以额外的支持基本数字类型之外的char*型了

const char* s1=“say”, s2 = "hello";
min(s1, s1) << endl;  //此时用户在程序外部调用

就可以正常的通过编译

因此模板的特化就是模板本身泛型能力不够的一种补充